# -*-  coding:utf-8 -*- 
# Author : lihongliang
"""
形参变量
只有在被调用时才分配内存单元，在调用结束时，即可释放所分配的内存单元。 因此，形参只在函数内部有效。 函数调用结束返回主调用函数后则不能再使用该形参变量
实参
可以是常量，变量，表达式，函数等，无论是实参是何种类型的良，在进行函数调用时，必须有明确的值，以便把这些值传送给形参，因此应预先用赋值，输入等办法使参数获得确定值

"""
# 默认参数
def stu_register(name,age,course,country='China'):
    print("registriation info.....")
    print(name,age,country,course)

stu_register("alex",22,'python')
stu_register("jack",22,'python')
stu_register("Rain",22,'python',country="England")

"""
# 关键参数
正常情况下， 给函数传参数要按顺序，不想按顺序就可以用关键参数，只需要指定参数名即可（指定了参数名的参数就叫关键参数）
但记住一个要求就是，关键参数必须放在位置（以位置顺序确定对应关系的参数）之后
"""
#非固定参数一：
def send_alert(msg,*users):
    for u in users:
        print(msg,"信息内容",u)

# 如果参数中出现*user，传递的参数就可以不再固定个数， 传过来的所有参数打包元组
#方式一：
send_alert("报警1","alex","abcdsdf")
send_alert("报警2","alex","XXX","ooo","abcdsdf")

#方式二：元组形式
send_alert("报警3",*["aaa","bb","ccc","ddd"])


# #非固定参数,中的 指定参数位置，注意此法不建议用：
# def send_alert(msg,*users,age):
#     for u in users:
#         print("信息内容如下：",u, msg, age)
#
# send_alert("报警4","test",age=22)

# 非固定参数 **参数 未定义的关键字参数

def func(name, *args, **kwargs):
    print(name,args, kwargs)

func('alex',22,'tesla','550W')
func('alex',22,'tesla','550W',addr = "山东", num = 123123123)

d= {'degree':'primary school'}
func("peiqi", **d)

